package com.atguigu.jxc.service;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;

import java.util.List;

/**
 * @program: jxc
 * @description:
 * @author: SXC
 * @create: 2021-09-04 10:11
 **/
public interface GoodsService {
    /**
     * 查询当前库存（可根据商品类别、商品编码或名称搜索）
     * @param page
     * @param rows
     * @param codeOrName
     * @param goodsTypeId
     * @return
     */
    List<Goods> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId);

    /**
     * 获取条数
     * @return
     */
    int count();

    /**
     * 获取数据
     * @param page
     * @param rows
     * @param goodsName
     * @param goodsTypeId
     * @return
     */
    List<Goods> goodsList(Integer page, Integer rows, String goodsName, Integer goodsTypeId);

    /**
     * 生成编码
     * @return
     */
    ServiceVO getCode();

    /**
     * 商品添加或修改
     * @param goods
     */
    void save(Goods goods);

    /**
     * 删除商品
     * @param goodsId
     */
    void delete(Integer goodsId);

    /**
     * 无库存商品列表展示（可以根据商品名称或编码查询）
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getNoInventoryQuantity(Integer page, Integer rows, String nameOrCode);

    /**
     * 获取数据
     * @return
     */
    int countNoInventoryQuantity();

    /**
     * 获取所有库存数据
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    List<Goods> getHasInventoryQuantity(Integer page, Integer rows, String nameOrCode);

    /**
     * 获取有库存条数
     * @return
     */
    int countHasInventoryQuantity();

    /**
     * 添加库存、修改数量或成本价
     * @param goodsId
     * @param inventoryQuantity
     * @param purchasingPrice
     */
    void saveStock(Integer goodsId, Integer inventoryQuantity, double purchasingPrice);

    /**
     * 删除库存（要判断商品状态 入库、有进货和销售单据的不能删除）
     * @param goodsId
     */
    void deleteStock(Integer goodsId);

    /**
     * 3、库存报警
     *      * 3.1、查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    List<Goods> listAlarm();
}
